#!/bin/bash

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 检查 .env.example 文件是否存在
if [ ! -f .env.example ]; then
    echo -e "${RED}错误: .env.example 文件不存在${NC}"
    exit 1
fi

# 检查 .env.production 文件是否存在
if [ ! -f .env.production ]; then
    echo -e "${YELLOW}正在创建 .env.production 文件...${NC}"
    cp .env.example .env.production
    echo -e "${YELLOW}请编辑 .env.production 文件并设置正确的配置值${NC}"
    echo -e "${YELLOW}特别注意以下配置项：${NC}"
    echo -e "1. DB_PASSWORD - 数据库密码"
    echo -e "2. JWT_SECRET - JWT密钥"
    echo -e "3. WX_APP_ID - 微信AppID"
    echo -e "4. WX_APP_SECRET - 微信AppSecret"
    echo -e "5. CORS_ORIGIN - 允许的跨域域名"
    exit 1
else
    source .env.production
fi

# 检查必要的环境变量是否已设置
required_vars=("DB_PASSWORD" "JWT_SECRET")
for var in "${required_vars[@]}"; do
    if [ -z "${!var}" ]; then
        echo -e "${RED}错误: ${var} 未在 .env.production 中设置${NC}"
        exit 1
    fi
done

# 设置文件权限
chmod 600 .env.production

# 构建和启动容器
echo -e "${GREEN}开始构建和启动容器...${NC}"
if ! docker-compose up -d --build; then
    echo -e "${RED}错误: 容器构建或启动失败${NC}"
    docker-compose logs
    exit 1
fi

# 等待 MySQL 容器就绪
echo -e "${YELLOW}等待 MySQL 容器就绪...${NC}"
until docker-compose exec mysql mysqladmin ping -h localhost -u root -p${DB_PASSWORD} --silent; do
    echo -e "${YELLOW}MySQL 尚未就绪，重试中...${NC}"
    sleep 2
done
echo -e "${GREEN}MySQL 已就绪！${NC}"


# 等待 backend 容器就绪
echo -e "${YELLOW}等待 backend 容器就绪...${NC}"
until curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/health | grep -q "200"; do
    echo -e "${YELLOW}backend 尚未就绪，重试中...${NC}"
    sleep 2
done
echo -e "${GREEN}backend 已就绪！${NC}"

# 执行数据库迁移
# echo -e "${YELLOW}执行数据库迁移...${NC}"
# docker-compose exec backend npx sequelize-cli db:migrate
# if [ $? -ne 0 ]; then
#     echo -e "${RED}错误: 数据库迁移失败${NC}"
#     exit 1
# fi

# 检查容器状态
echo -e "${GREEN}检查容器状态...${NC}"
docker-compose ps

echo -e "${GREEN}部署完成！${NC}" 